package com.yfqy.app.domain.mapper;

import com.yfqy.app.domain.entity.OrderInfo;
import com.yfqy.app.modules.order.dto.OrderInfoDTO;
import com.yfqy.app.modules.order.dto.OrderQueryDTO;
import com.yfqy.app.modules.order.vo.OrderInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface OrderInfoMapper {

    int insert(OrderInfo record);

    OrderInfo selectByPrimaryKey(Long id);

    List<OrderInfoVO> selectByOrderQueryDTO(@Param("dto") OrderQueryDTO dto);

    OrderInfoVO selectOrderInfoVoById(@Param("id") Long id);

    int cancelOrder(@Param("updateOrder") OrderInfo updateOrder, @Param("currStatus") Byte currStatus);

    OrderInfoDTO selectOrderInfoDTOById(@Param("id") Long id);

    int updateOrderStatus(@Param("updateOrder") OrderInfo updateOrder, @Param("currStatus") byte currStatus);

    /**
     * 已支付并且下单时间范围[2天前, 2小时前]
     *
     * @return
     */
    List<OrderInfo> selectNeedAutoOutBoundOrderInfo();

    // 查询待发货订单
    List<OrderInfo> selectPendingShipmentOrders();

    /**
     * 查询促销活动销售数据
     *
     * @param promotionId
     * @return
     */
    List<OrderInfo> selectByPromotionId(Long promotionId);

    OrderInfo selectByOrderNo(@Param("orderNo") String orderNo);

    int updateOrderStatusByPayCallback(@Param("updateOrder") OrderInfo updateOrder, @Param("currStatus") byte currStatus);

    OrderInfo selectByOrderNoForUpdate(@Param("orderNo") String orderNo);
}